package reflect;
/*
利用反射机制调用Person类中本类自己定义的所有无参且公开的方法
//1.获取Person类中所有本类定义的方法
     getDeclaredMethods()
//2.遍历每一个方法，并判断
    公开，无参
    满足则调用
*/

import java.lang.reflect.Method;
import java.lang.reflect.Modifier;

public class Test2 {
    /*
     * 主函数，通过反射机制动态调用类的方法。
     * @param args 命令行参数，未在此处使用。
     * @throws Exception 反射操作可能抛出的异常。
     */
    public static void main(String[] args) throws Exception {
        // 通过类名动态加载Person类
        Class cls = Class.forName("reflect.Person");
        // 创建Person类的实例
        Object obj = cls.newInstance();

        // 获取类中所有声明的方法
        Method[] methods = cls.getDeclaredMethods();
        // 遍历所有方法，寻找无参数且公开的方法
        for (Method method : methods) {
            // 当方法无参数且为公开方法时，执行以下代码
            if (
                    method.getParameterCount() == 0
                            &&
                            method.getModifiers() == Modifier.PUBLIC
            ) {
                // 打印方法名
                System.out.println("调用方法：" + method.getName() + "()");
                // 调用方法，传入实例对象
                method.invoke(obj);
            }
        }
    }
}
